IO流
1. 字节流
- 输入:InputSteam
- 输出:OutputSteam
2. 字符流
- Reader
- Writer
3. 节点流
- Char
- CharArrayReader
- CharArrayWriter
- String
- StringReader
- StringWriter
- Pipe
- PipeInputStream
- PipeOutputStream
- File
- FileInputSteam
- FileOutputStream
4. 处理流
buffer
- BufferInputStream
- BufferOutputStream
- BufferReader
- BufferWriter
序列化和反序列化
Serializable
Java 关键字 transient (透明的)
某属性是透明的就不会被序列化。
data
- DataInputSteam
- DataOutputSteam
object流
转换流
- InputSteamReader
- InputSteamWriter
Filter
- 四个
print
- PrintWriter
- PrintStream
5. 流的概念
- 概念:内存与存储设备之间传输数据的通道。
6. 流的分类
- 按方向
- 输入流:将<存储设备>中的内容读入到<内存>中。
- 输出流:将<内存>中的内容写入到<存储设备>中。
- 按单位
- 字节流:以字节为单位,可以读写所有数据。
- 字符流:以字符为单位,只能读写文本数据。
- 按功能
- 字节流:具有实际传输数据的读写功能。
- 过滤流:在节点流的基础之上增强功能。
7. 开发时用的对象
想要知道开发时用到哪些对象。只要通过四个明确即可。
- 明确是否有源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
- 明确数据是否是纯文本数据。
源:是纯文本:Reader
否:InputStream
目的:是纯文本 Writer
否:OutputStream
- 明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
是否需要其他额外功能。
是否需要高效(缓冲区);
是,就加上buffer.
转换。转换流。
8. 其他注意点
如果需求中已经明确了指定编码表的动作,那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。只能使用其父类OutputStreamWriter。
OutputStreamWriter接收一个字节输出流对象,既然是操作文件,那么对象应该是FileOutputStream。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt", charsetName));
什么时候需要使用转换流?
- 源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷。
- 一旦操作文本设计具体的指定编码表时,必须使用转换流。